package club.controller;

import club.pojo.Pet;
import club.service.PetService;
import club.util.Message;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;


@Controller
@RequestMapping("/pet")
public class PetController {

    @Resource
    private PetService petService;
    // 宠物服务层依赖注入

    /**
     * 分页查询宠物列表（支持按宠物类型筛选）
     * @param petType 宠物类型（可选，用于模糊查询）
     * @param pageNum 页码（必填，默认值通过方法内逻辑处理）
     * @return Message.success() 携带分页数据（键："pageInfo"，值：PageInfo<Pet>）
     */
    @RequestMapping("/pets")
    @ResponseBody
    public Message pet(@RequestParam(required = false) String petType, @RequestParam("pn") Integer pageNum) {
        Integer pageSize = 3;
        if (pageNum == null) {
            pageNum = 1;
        }
        // 调用服务层进行分页查询，传入类型、页码、页大小
        PageInfo<Pet> pets = petService.allPet(petType, pageNum, pageSize);
        return Message.success().add("pageInfo", pets);
    }

    /**
     * 根据ID查询宠物详情并存储到会话中
     * @param session HTTP会话（用于存储查询到的宠物信息和图片路径）
     * @param id 宠物ID（必填）
     * @return Message.success() 携带宠物对象（键："pet"，值：Pet）
     */
    @RequestMapping("/findById")
    @ResponseBody
    public Message findPetById(HttpSession session, Integer id) {
        Pet pet = petService.findById(id);
        // 查询宠物详情
        String pics = pet.getPic();
        // 获取宠物图片路径
        session.setAttribute("pet", pet);
        // 将宠物对象存入会话（供后续操作使用，如编辑页面回显）
        session.setAttribute("pics", pics);
        // 单独存储图片路径（可能用于图片预览或更新时对比）
        return Message.success().add("pet", pet);
        // 返回宠物对象给前端
    }

    /**
     * 创建新宠物（含图片上传）
     * @param pet 宠物对象（包含基础信息）
     * @param file 宠物图片文件（必填）
     * @return Message.success() 或 Message.fail() 根据创建结果返回
     */
    @RequestMapping("/create")
    @ResponseBody
    public Message add(Pet pet, MultipartFile file) {
        // 调用文件上传工具类，生成唯一文件名并保存图片到指定目录
        String pic = FileLoad.uploadPetPic(file);
        pet.setPic(pic);
        // 将图片路径存入宠物对象

        // 调用服务层创建宠物记录
        int add = petService.add(pet);
        return add > 0 ? Message.success() : Message.fail();
        // 根据影响行数判断成功与否
    }

    /**
     * 更新宠物信息（支持图片更新）
     * @param pet 宠物对象（包含更新后的信息，必须包含ID）
     * @param file 新上传的宠物图片（可选，若未上传则保留原图片）
     * @return Message.success() 或 Message.fail() 根据更新结果返回
     */
    @RequestMapping("/update")
    @ResponseBody
    public Message update(Pet pet, MultipartFile file) {
        // 如果有新图片上传，则替换旧图片
        if (file != null && file.getSize() > 0) {
            String pic = FileLoad.uploadPetPic(file);
            // 上传新图片
            pet.setPic(pic);
            // 更新宠物图片路径
        }

        // 调用服务层更新宠物信息
        int update = petService.update(pet);
        return update > 0 ? Message.success() : Message.fail();
        // 根据影响行数判断成功与否
    }

    /**
     * 删除宠物记录（物理删除）
     * @param id 宠物ID（必填）
     * @return Message.success() 或 Message.fail() 根据删除结果返回
     */
    @RequestMapping("/delete")
    @ResponseBody
    public Message del(Integer id) {
        int del = petService.del(id);
        // 调用服务层执行删除
        return del > 0 ? Message.success() : Message.fail();
        // 根据影响行数判断成功与否
    }
}